import { fileURLToPath, URL } from 'node:url'
// 自动导入
import { defineConfig } from 'vite'
import AutoImport from 'unplugin-auto-import/vite'
import Components from 'unplugin-vue-components/vite'
import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'

import vue from '@vitejs/plugin-vue'
import vueJsx from '@vitejs/plugin-vue-jsx'
// https://vitejs.dev/config/
export default defineConfig(({ command, mode }) => {
  const dayjs = require('dayjs')
  const execSync = require('child_process').execSync // 同步子进程
  const date = dayjs().format('YYYY-MM-DD HH:mm:ss') // 日期
  const message = execSync('git show -s --format=%s').toString().trim() // 说明
  const branch = execSync('git name-rev --name-only HEAD', { encoding: 'utf8' }).trim() // 分支
  return {
    // 设置默认访问路径，如：localhost:10087/manage-web-static/
    base: '/',
    plugins: [
      vue(), 
      vueJsx(),
      AutoImport({
        resolvers: [ElementPlusResolver()],
      }),
      Components({
        resolvers: [ElementPlusResolver()],
      }),
    ],
    // 全局样式文件`全局注入`到项目
    resolve: {
      alias: {
        '@': fileURLToPath(new URL('./src', import.meta.url))
      }
    },
    // 启动服务配置
    server: {
      port: 8888,
      open: true,
      https: false,
      proxy: {
        '/api': { // 匹配所有以 /api 开头的请求路径
          target: 'http://60.204.236.211:8080', // 目标服务器地址
          changeOrigin: true, // 是否改变源地址
          // rewrite: (path) => path.replace(/^\/api/, '') // 重写请求路径
        }
      }
    },
    css: {
      preprocessorOptions: {
        scss: {
          additionalData: '@use "@/assets/style/style.scss" as *;',
          api: 'modern-compiler',
        },
      },
    },
    // 生产环境打包配置
    //去除 console、debugger
    build: {
      outDir: 'manage-web-static',
      assetsDir: 'static',
      rollupOptions: {
        output: {// 静态资源分类打包
          // 入口文件名
          entryFileNames: 'static/js/[name]-[hash].js',
          // 块文件名
          chunkFileNames: 'static/js/[name]-[hash].js',
          // 资源文件名 css 图片等等
          assetFileNames: 'static/[ext]/[name]-[hash].[ext]'
        },
      },
      terserOptions: {
        compress: {
          // drop_console: true,
          drop_debugger: true,
        },
      },
    },
    // 配置全局变量
    define: {
      __DEV__: mode === "development",
      __VUE_APP_BUILD_TIME__: JSON.stringify(date),
      __VUE_APP_BRANCH__: JSON.stringify(message),
      __VUE_APP_MESSAGE__: JSON.stringify(branch)
    },
  }
})
